/**
 * 该模块定义方法以支持对象的相等比较。
 * License: BSD
 * Authors: Lucifer (786325481@QQ.com)
 * Copyright: Copyright (C) 2008 Lucifer. All rights reserved.
 */
module system.collections.IEqualityComparer;

///定义方法以支持对象的相等比较。
public interface IEqualityComparer(T)
{
    /**
     * 确定指定的对象是否相等。
     * Params: x = 要比较的第一个类型为 T 的对象。
     *         y = 要比较的第二个类型为 T 的对象。
     * Returns: 如果指定的对象相等，则为 true；否则为 false。
     * Comments: 实现此方法可为类型 T 提供自定义相等比较。
     *           <strong>给实现者的说明:</strong>
     *           实现需要确保如果对两个对象 x 和 y 执行 Equals 方法返回 true，
     *           则对 x 和 y 分别执行 toHash 方法所返回的值必须相等。
     *           equals 方法是自反的、对称的和传递的。
     */
    bool equals(T x, T y);
    /**
     * 返回指定对象的哈希代码。
     * Comments: 实现此方法可为类型 T 提供自定义哈希代码，此代码对应于 Equals 方法提供的自定义相等比较。
     *           <strong>给实现者的说明:</strong>
     *           实现需要确保如果对两个对象 x 和 y 执行 equals 方法返回 true，
     *           则对 x 和 y 分别执行 toHash 方法所返回的值必须相等。
     */
    hash_t toHash(T value);
}
